<?php

class IndicadoresController extends Zend_Controller_Action {
	
	public function init() {
        $ajaxContext = $this->_helper->ajaxContext;
        $ajaxContext->addActionContext('addsexo', 'json')
        			->addActionContext('index', 'json')
                    ->addActionContext('addfaixa',array('json','xml'))
                    ->initContext();        

	}
	
	public function indexAction() {
		$sist = '';
		$codigo_sistema = $this->_getParam('cod_sistema');
	    if ($this->getRequest ()->isPost ()) {
             $formData = $this->getRequest ()->getPost ();
             $codigo_sistema = $formData['cod_sistema'];
        }		
		if($codigo_sistema){
		  
		  $sist = "AND num_indicador in(select num_indicador from configuracao_indicadores where sistema_numerador=$codigo_sistema)";
		}
        $sistemas = new Model_Sistemas ( );
        $select_sistema = new Zend_Form_Element_Select('cod_sistema');
        $select_sistema->setLabel('Selecione o sistema');
        foreach ($sistemas->fetchAll(null,'nome_sistema') as $sistema) 
            $select_sistema->addMultiOption($sistema->codigo, $sistema->nome_sistema);
		$this->view->select_sistema=$select_sistema;
		$indicadores = new Model_Indicadores ();
		$where = "tipoorigem=2 AND situacao='A' $sist";
		$order = $this->_getParam('order','num_indicador');
		$this->view->indicadores = $indicadores->fetchAll ( $where,$order );
	
	}
	
    public function calcularAction()
    {
            $sist = '';
        $codigo_sistema = $this->_getParam('cod_sistema');
        if ($this->getRequest ()->isPost ()) {
        	 $formData = $this->getRequest ()->getPost ();
        	 $codigo_sistema = $formData['cod_sistema'];
        }
        if($codigo_sistema){
          
          $sist = "AND num_indicador in(select num_indicador from configuracao_indicadores where sistema_numerador=$codigo_sistema)";
        }    	
    	
        $sistemas = new Model_Sistemas ( );
        $select_sistema = new Zend_Form_Element_Select('cod_sistema');
        $select_sistema->setLabel('Selecione o sistema');
        foreach ($sistemas->fetchAll(null,'nome_sistema') as $sistema) 
            $select_sistema->addMultiOption($sistema->codigo, $sistema->nome_sistema);

        $this->view->select_sistema=$select_sistema;    
        $indicadores = new Model_Indicadores ( );
        $select = $indicadores->select ( true );
        $where = "tipoorigem=2 AND situacao='A' $sist";
        $where .= " AND num_indicador in (select num_indicador from configuracao_indicadores where finalizado=true)";
        $order = $this->_getParam('order','num_indicador');        
        $this->view->indicadores = $indicadores->fetchAll ( $where, $order );
    }
	
	public function configurarAction() {
		$num_indicadores = implode ( ',', $this->_getParam ( 'num_indicadores' ) );
                
        $selectunion = " SELECT distinct sistema_numerador from configuracao_indicadores WHERE num_indicador in ($num_indicadores)";
        $selectunion .= " UNION SELECT distinct sistema_denominador from configuracao_indicadores where num_indicador in ($num_indicadores)";
        $sistemas = new Model_Sistemas ( );
        $sistemas = $sistemas->fetchAll ( "codigo in ($selectunion)", "codigo" );
        $this->view->num_indicadores = $num_indicadores;
        $this->view->sistemas = $sistemas;
	}
	
	public function editarAction() {
		
		$this->form = new Form_IndicadorCalculo ();
		if ($this->getRequest ()->isPost ()) {
			$this->save ();
			$indicadores = new Model_Indicadores ();
			$indicador = $indicadores->fetchRow ( "num_indicador=" . $this->form->getValue ( 'num_indicador' ) );
			$indicador_configuracao = $indicador->findDependentRowset('Model_IndicadoresConfiguracoes')->current();
		} else {
			$indicadores = new Model_Indicadores ();
			$indicador = $indicadores->fetchRow ( "num_indicador=" . $this->_getParam ( 'num_indicador' ) );
			if (! $indicador) {
				$this->_redirect ( 'indicadores/error' );
			}
			$indicador_configuracao = $indicador->findDependentRowset('Model_IndicadoresConfiguracoes')->current();
			if ($indicador_configuracao) {
				$this->form->populate ( $indicador_configuracao->toArray () );
			} else {
				$this->form->num_indicador->setValue ( $indicador->num_indicador );
			}
		}
		$this->view->form = $this->form;
		$this->view->indicador = $indicador;
		
		if($indicador_configuracao){
			$this->formFaixaEtaria = new Form_FaixaEtaria();
			$this->formFaixaEtaria->codigo_configuracao->setValue($indicador_configuracao->codigo);
			$this->formFaixaEtaria->num_indicador->setValue($indicador_configuracao->num_indicador);
			$this->view->formFaixaEtaria = $this->formFaixaEtaria;
			$this->view->indicador_configuracao = $indicador_configuracao;
		}
		
		
	
	}
	
	public function procurarAction() {
		// action body
	}
	
	public function periodoAction() {

        $num_indicadores = $this->_getParam("num_indicadores");
        
        $indicadores = new Model_Indicadores ( );
        $indicadores_configuracoes = new Model_IndicadoresConfiguracoes();
        
        $this->view->indicadores = $indicadores->fetchAll("num_indicador in($num_indicadores)", "num_indicador");
        
        $form = new Zend_Form();
        $form_num_indicador = new Zend_Form_Element_Hidden('num_indicadores');
        $form_num_indicador->setValue($num_indicadores);
         
        $submit = new Zend_Form_Element_Submit('submit');
        $submit->setLabel('Executar');
        $usernames = $this->_getParam('username');
        $passwords = $this->_getParam('password');
        
        
        /* armazena os usuários e senhas na session para serem usados na execução do cálculo */
        $session = new Zend_Session_Namespace('conexoes');
        $session->usernames = $usernames;
        $session->passwords = $passwords;
        
        foreach($this->view->indicadores as $indicador){
            $indicadores_configuracoes = $indicador->findDependentRowset("Model_IndicadoresConfiguracoes")->current();
            $sistema = $indicadores_configuracoes->findParentRow("Model_Sistemas","Sistema");
            $tiposervidor = $sistema->findParentRow("Model_TiposServidores");
            
            $db = $this->makeConnection($sistema->nome_servidor,
                                         $usernames[$sistema->codigo],
                                         $passwords[$sistema->codigo],
                                         $sistema->nome_banco,
                                         $tiposervidor->driver
                                         );

                                                             
                                         
            $inicio = new Zend_Form_Element_Select('mes_inicio_'.$indicadores_configuracoes->num_indicador);
            $final  = new Zend_Form_Element_Select('mes_final_'.$indicadores_configuracoes->num_indicador);
            $anos = new Zend_Form_Element_Multiselect('anos_'.$indicadores_configuracoes->num_indicador);
            $mes_referencia = new Zend_Form_Element_Text('mes_referencia_'.$indicadores_configuracoes->num_indicador); 
            $db->setFetchMode(Zend_Db::FETCH_ASSOC);
            $instrucaosql = $indicadores_configuracoes->findParentRow('Model_InstrucoesSql','InstrucoesSql');
            $results = $db->fetchAll($instrucaosql->periodo_disponivel);
            
            
            foreach($results as $result){
                   $result = array_change_key_case($result,CASE_LOWER);
                   $inicio->setValue($result['inicio']);
                   $final->setValue($result['final']);
                   $mi = substr($result['inicio'],4,2);
                   $Yi = substr($result['inicio'],0,4);
                   $mf = substr($result['final'],4,2);
                   $Yf = substr($result['final'],0,4);
                   
                    $dt_inicial = mktime( 0, 0, 0, $mi, 1, $Yi );
                    $dt_final = mktime( 0, 0, 0, $mf, 1, $Yf);
                    $inicio_anualizado = strtotime("+12 month", $dt_inicial );
                    $mes_referencia->setLabel("Entre: ".date("Ym ",$inicio_anualizado)." e ".date("Ym",$dt_final));
                    
                    $meses_disponiveis = array();
                    $anos_disponiveis = array();
                    while ($dt_inicial<=$dt_final) {
                        
                        $anos_disponiveis[date("Y",$dt_inicial)]=date("Y",$dt_inicial);
                        $meses_disponiveis[date("Ym",$dt_inicial)]=date("m/Y",$dt_inicial);
                        $dt_inicial = strtotime("+1 month", $dt_inicial );
                    }
                    $inicio->addMultiOptions($meses_disponiveis);
                    $final->addMultiOptions($meses_disponiveis);
                    $anos->addMultiOptions($anos_disponiveis);
            }
            $form->addElement($form_num_indicador);
            $form->addElement($inicio);       
            $form->addElement($final);
            $form->addElement($anos);
            $form->addElement($mes_referencia);
            
            $form->addElement($submit);
        }
        $this->view->form = $form;
		
		
	}
	
	public function executarAction() {
        $num_indicadores = $this->_getParam('num_indicadores');
        $arr_indicadores = explode(',',$num_indicadores);
        $calcularindicadores = new App_CalcularIndicadores();
        $model_configuracao_indicadores = new Model_IndicadoresConfiguracoes();
        foreach ($arr_indicadores as $num_indicador){
        	$indicador_configuracao = $model_configuracao_indicadores->fetchRow('num_indicador='.$num_indicador);
        	$options = array( 'mes_inicio'=> $this->_getParam('mes_inicio_'.$num_indicador),
                              'mes_final' => $this->_getParam('mes_final_'.$num_indicador),
                              'anos'=>$this->_getParam('anos_'.$num_indicador),              
                              'mes_referencia'=>$this->_getParam('mes_referencia_'.$num_indicador),
                );
        	if($indicador_configuracao->detalhar_distrito){
        		$calcularindicadores->calcular($num_indicador,$options);
        		$model_unidadesaude = new Model_UnidadeSaude();
        		$distritos =  $model_unidadesaude->fetchAll("num_tipo_unsa = 32 and cod_unsa <> 10");
        		foreach ($distritos as $distrito){
        			$options['cod_unsa'] = $distrito->cod_unsa;
        			$calcularindicadores->calcular($num_indicador,$options);
        		}
        	}else{
	            $calcularindicadores->calcular($num_indicador,$options);
        	}
            
        }
        $indicadores = new Model_Indicadores();
        $this->view->indicadores = $indicadores->fetchAll("num_indicador in($num_indicadores)");
        
	}
	
	private function save() {

		$indicadores_configuracoes = new Model_IndicadoresConfiguracoes ();
		if ($this->getRequest ()->isPost ()) {
			$formData = $this->getRequest ()->getPost ();
			if ($this->form->isValid ( $formData )) {
				
				$indicador_configuracao = $indicadores_configuracoes->fetchRow ( "num_indicador=" . $this->form->getValue ( 'num_indicador' ) );
				if ($indicador_configuracao) {
					$indicadores_configuracoes->update ( $this->form->getDados (), "num_indicador=" . $this->form->getValue ( 'num_indicador' ) );
				} else {
					$indicadores_configuracoes->insert ( $this->form->getDados () );
				}
			} else {
				$this->form->populate ( $formData );
			}
		}
	}



  
    /**
     * Adiciona Faixa Etária
     */
    public function addfaixaAction(){
    	$this->formFaixaEtaria = new Form_FaixaEtaria();
        if ($this->getRequest ()->isPost ()) 
        {
            $formData = $this->getRequest ()->getPost ();
            if ($this->formFaixaEtaria->isValid ( $formData )) 
            {
            	
                $dados = $this->formFaixaEtaria->getDados ();
                
                $faixasEtarias = new Model_FaixaEtaria();
                if($this->formFaixaEtaria->getValue('codigo')==''){
                    $codigo = $faixasEtarias->insert ( $dados );
                    
                }else{
                    $codigo = $this->formFaixaEtaria->getValue('codigo');
                    $faixasEtarias->update($dados, 'codigo='.$codigo);
                    
                }
                $faixaEtaria = $faixasEtarias->fetchRow('codigo='.$codigo);
                $returns =array();
                
                //$toolbar = $this->view->lineToolbar('projetos',$faixaEtaria);
                //$returns['toolbar']=$toolbar;
                $returns['obj'] = $faixaEtaria->toArray();
                $return = Zend_Json_Encoder::encode($returns);
                
            }else{
            	
                $this->formFaixaEtaria->populate($formData);
                $return = $this->formFaixaEtaria->processAjax($this->_request->getPost());
                
            }
        }
        if ($this->_request->isXmlHttpRequest()) {
            $this->_helper->layout()->disableLayout();
            $this->_helper->viewRenderer->setNoRender(true);
            echo $return;
        }else{
            
            $url = 'indicadores/editar/num_indicador/'.$this->formFaixaEtaria->getValue('num_indicador').'/tab/3';
            $this->_redirect($url);
        }
        
    }

    function makeConnection($host, $username, $password, $dbname, $adapter)
    {
        $options = array(
                        Zend_Db::CASE_FOLDING => Zend_Db::CASE_LOWER
                    );
        $params = array (
                    'host'     => $host,
                    'username' => $username,
                    'password' => $password,
                    'dbname'   => $dbname,
                    'options'  => $options 
                    
                );
        if($adapter=='pdo_mssql')
            $params['pdoType'] = 'dblib';
        $db = Zend_Db::factory($adapter, $params);
        return $db;
    }    
}













